﻿using NDF.Data.EntityFramework;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UA.Data.Model.Common
{
    /// <summary>
    /// 表示实体数据模型的基类
    /// </summary>
    public abstract partial class EntityModelBase
    {
        private Guid? _key;
        private DateTime? _createDate;
        private DateTime? _modifyDate;
        private int? _createUserID;
        private int? _modifyUserID;

        protected EntityModelBase() { }


        /// <summary>
        /// 获取或设置实体数据模型的 ID(数据标识列，一般作为表示数据的唯一标识)。
        /// </summary>
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }

        /// <summary>
        /// 获取或设置该实体数据模型的 Key（主键） 值。
        /// </summary>
        [Key]
        public Guid Key
        {
            get
            {
                if (!this._key.HasValue)
                {
                    this._key = Guid.NewGuid();
                }
                return this._key.Value;
            }
            set { this._key = value; }
        }



        /// <summary>
        /// 获取或设置实体数据模型的模型状态标记。
        /// 该属性标记了数据的可用性，参考 <see cref="ModelFlag"/>。
        /// </summary>
        public ModelFlag Flag { get; set; }




        /// <summary>
        /// 获取或设置当前实体数据模型的创建时间，该时间一般指实体数据被持久化至数据库的时间。
        /// </summary>
        public DateTime CreateDate
        {
            get
            {
                if (!this._createDate.HasValue)
                {
                    this._createDate = DateTime.Now;
                }
                return this._createDate.Value;
            }
            set { this._createDate = value; }
        }

        /// <summary>
        /// 获取或设置当前实体数据模型的创建用户ID，该用户ID指的是业务用户，而非操作系统账户。
        /// </summary>
        public int CreateUserID
        {
            get
            {
                if (!this._createUserID.HasValue)
                {
                    this._createUserID = 0;
                }
                return this._createUserID.Value;
            }
            set { this._createUserID = value; }
        }



        /// <summary>
        /// 获取或设置当前实体数据模型的最后一次修改时间，该时间一般指实体数据模型最后一次变更并且被持久化至数据库的时间。
        /// </summary>
        public DateTime ModifyDate
        {
            get
            {
                if (!this._modifyDate.HasValue)
                {
                    this._modifyDate = DateTime.Now;
                }
                return this._modifyDate.Value;
            }
            set { this._modifyDate = value; }
        }

        /// <summary>
        /// 获取或设置当前实体数据模型的最后一次修改者的用户ID，该用户ID指的是业务用户，而非操作系统账户。
        /// </summary>
        public int ModifyUserID
        {
            get
            {
                if (!this._modifyUserID.HasValue)
                {
                    this._modifyUserID = 0;
                }
                return this._modifyUserID.Value;
            }
            set { this._modifyUserID = value; }
        }

    }
}
